#!/usr/bin/env python
# coding: utf-8

# In[1]:


"""递归搜索指定类型文件"""

import os
import re

List = []

def files1(dirPath): 
    files = os.listdir(dirPath)  # 获取文件夹中的所有文件名
    n = re.compile('.*\.dll')  # 标定特定后缀（如.dll）
    for f in files:

        if (os.path.isdir(dirPath + '\\' + f)):
            files2(dirPath + '\\' + f)
        # 判断文件路径，如果是文件夹，则递归继续遍历
        elif (os.path.isfile(dirPath + '\\' + f)):
            m = n.match(f)
        # 如果是文件，则搜索特定后缀（如.dll）的文件名
            if (m != None):
                List.append(dirPath + '\\' + m.group())
        else:
            List.append(dirPath + '\\空')

# 递归处理文件夹
def files2(dirPath):
    files1(dirPath)
    return List

#指定目录搜索特定后缀文件夹
path = 'D:\\WeChat'
m = files2(path)
print('搜索结果为：')
for f in m:
    print(f)


# In[5]:


# python使用‘os’和‘re’模块提取目录中特定类型的文件，这两个模都是安装python自带的，所以不需要安装。

思路：

使用os库lilstdir获取文件夹中的所有文件名，然后带上文件夹路径组合成为完整绝对路径，然后去判断该路径文件的类型，如果是文件，使用re库正则相关函数去筛选出特定后缀的文件；如果是文件夹，递归处理此文件夹。

注意：

下面代码提取的是‘xlsx’文件，如果需要提取其他类型的文件，替换re.complie('str')中的正则表达式即可。


# In[6]:


"""递归搜索指定类型文件"""

import os
import re

List = []

def files1(dirPath): 
    files = os.listdir(dirPath)  # 获取文件夹中的所有文件名
    ptn = re.compile('.*\.dll')  # 标定特定后缀（如.dll）
    for f in files:

        if (os.path.isdir(dirPath + '\\' + f)):
            files2(dirPath + '\\' + f)
        # 判断文件路径，如果是文件夹，则递归继续向下遍历
        elif (os.path.isfile(dirPath + '\\' + f)):
            res = ptn.match(f)
        # 如果是文件，则搜索特定后缀（如.dll）的文件名
            if (res != None):
                List.append(dirPath + '\\' + res.group())
        # 如果是空，则剔除此路径
        else:
            List.append(dirPath + '\\空文件')

# 递归处理文件夹
def files2(dirPath):
    files1(dirPath)
    return List

#指定目录搜索特定后缀文件夹
path = 'D:\\WeChat'
res = files2(path)
print('搜索结果为：')
for f in res:
    print(f)


# In[ ]:




